//Commons function

function is_obj(obj) {
    return (obj != null && obj instanceof Object);
}

function is_func(func) {
    return (func != null && func.constructor == Function);
}
function is_str(str) {
    return (str && (/string/).test(typeof str));
}


function util_trim(str) {
    return (/string/).test(typeof str) ? str.replace(/^\s+|\s+$/g, "") : "";
}

function join(str) {
    var store = [str];
    return function extend(other) {
        if (other != null && 'string' == typeof other) {
            store.push(other);
            return extend;
        }
        return store.join('');
    }
}

function is_phone(num) {
//return (/^(0120|0121|0122|0123|0124|0125|0126|0127|0128|0129|0163|0164|0165|0166|0167|0168|0169|0188|0199|090|091|092|093|094|095|096|097|098|099)(\d{7})$/i).test(num);
//return (/^(01([0-9]{2})|09[0-9])(\d{7})$/i).test(num);
    var patt = new RegExp(/^(01([0-9]{2})|09[0-9])(\d{7})$/i);
    return patt.test(num);
}


function is_email(str) {
    var patt = new RegExp(/^[a-z-_0-9\.]+@[a-z-_=>0-9\.]+\.[a-z]{2,3}$/i);
    return patt.test(util_trim(str));
}


function isNotSafePassword(password) {
    var strSimplePassword = 'abc123,abc@123,123456,qwerty,qazwsx,1234567,12345678,123456789,1234567890,0123456789,654321,0123456,123abc,abcdef,qwertyuiop,1qaz2wsx,password,111111,iloveyou,123123,ashley,bailey,baseball,dragon,football,letmein,master,michael,monkey,passw0rd,shadow,sunshine,superman,trustno1';
    var ret = true;
    strSimplePassword = ',' + strSimplePassword + ',';
    if (strSimplePassword.indexOf(',' + password + ',') != -1) {
        ret = true;
    } else {
        ret = false;
    }
    return ret;
}

function numberOnly(myfield, e) {
    var key, keychar;
    if (window.event) {
        key = window.event.keyCode
    }
    else if (e) {
        key = e.which
    }
    else {
        return true
    }
    keychar = String.fromCharCode(key);
    if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27)) {
        return true
    }
    else if (("0123456789").indexOf(keychar) > -1) {
        return true
    }
    return false;
}
;
//Set Error
function set_error(id, msg, width, cl) {
    msg = msg ? msg : '';
    width = width ? width : 430;
    var html = join
            ('<div class="my_msg" style="width: ' + width + 'px;">')
            (msg)
            ('</div>')();
    if (cl) {
        jQuery('#cError', jQuery(cl)).html(html);
    } else {
        jQuery('#cError').html(html);
    }
    jQuery(id).addClass('error').focus();
}

function close_error(id, cl) {
    if (cl) {
        jQuery('#cError', jQuery(cl)).html('');
    } else {
        jQuery('#cError').html('');
    }
    jQuery(id).removeClass('error');
}

function valid_register()
{
    var name = util_trim(jQuery('#reg_full_name').val());
    if (name == '') {
        set_error('#reg_full_name', 'Chưa nhập họ tên', 530, '.register_form');
        return false;
    } else if (name.length < 3) {
        set_error('#reg_full_name', 'Họ tên dài ít nhất 3 ký tự', 530, '.register_form');
        return false;
    } else if (name.match(/['"><=&?!~%+{}[\]|`()@#$^*-/\\,.]/i) != null) {
        set_error('#reg_full_name', 'Họ tên không được chứa các ký tự đặc biệt', 530, '.register_form');
        return false;
    } else {
        close_error('#reg_full_name', '.register_form');
    }
    var reg_phone = util_trim(jQuery('#reg_phone').val());
    if (reg_phone == '') {
        set_error('#reg_phone', 'Chưa nhập số điện thoại', 530, '.register_form');
        return false;
    } else if (!is_phone(reg_phone)) {
        set_error('#reg_phone', 'Số điện thoại di động không hợp lệ', 430, '.register_form');
        return false;
    } else {
        close_error('#reg_phone', '.register_form');
    }
    var email = util_trim(jQuery('#reg_email').val());
    if (email == '') {
        set_error('#reg_email', 'Chưa nhập email', 530, '.register_form');
        return false;
    } else if (!is_email(email)) {
        set_error('#reg_email', 'Email không hợp lệ', 530, '.register_form');
        return false;
    } else {
        close_error('#reg_email', '.register_form');
    }

    var pass = jQuery('#reg_pass').val();
    if (pass.length < 6) {
        set_error('#reg_pass', 'Mật khẩu tối thiểu phải có 6 kí tự', 530, '.register_form');
        jQuery('#reg_pass #reg_pass1').val('');
        return false;
    }
    if (pass == '') {
        set_error('#reg_pass', 'Chưa nhập mật khẩu hoặc có chỉ có ký tự trắng', 530, '.register_form');
        jQuery('#reg_pass #reg_pass1').val('');
        return false;
    }
    if (util_trim(pass) == '') {
        set_error('#reg_pass', 'Không được bỏ trống trường mật khẩu hoặc dùng ký tự cách', 530, '.register_form');
        jQuery('#reg_pass #reg_pass1').val('');
        return false;
    }

    if (isNotSafePassword(pass)) {
        set_error('#reg_pass', 'Mật khẩu quá đơn giản, không an toàn để sử dụng dịch vụ!', 530, '.register_form');
        return false;
    } else {
        close_error('#reg_pass', '.register_form');
    }

    //pass = util_trim(pass);
    close_error('#reg_pass', '.register_form');
    var pass1 = jQuery('#reg_pass1').val();
    if (pass1 == '') {
        set_error('#reg_pass1', 'Chưa nhập lại mật khẩu', 530, '.register_form');
        return false;
    } else if (pass != pass1) {
        set_error('#reg_pass1', 'Mật khẩu không khớp', 530, '.register_form');
        return false;
    } else {
        close_error('#reg_pass1', '.register_form');
    }

    return true;
}

function show_otp_form() {
    jQuery('#otp_form').popup('show');
}

jQuery(document).ready(function() {
    var phone = '';
    var email = '';
    var csrf_hash = jQuery('#ifree_token').val();
    var base_url = jQuery('#base_url').val();
    jQuery.ajaxSetup({
        data: {
            csrf_ifree: csrf_hash
        }
    });
    jQuery('#register_form').popup({
        transition: 'all 0.3s',
        blur: false,
        onopen: function() {
            jQuery('#reg_email').val('');
            jQuery('#reg_pass').val('');
            jQuery('#reg_phone').val('');
            jQuery('#reg_full_name').val('');
            jQuery('#reg_pass1').val('');
            jQuery('#reg_full_name').val('');
        }
    });
    jQuery('#otp_form').popup({
        transition: 'all 0.3s',
        blur: false
    });
    jQuery('.classic-popup-close').click(function() {
        jQuery('#register_form').popup('hide');
        return false;
    });
    jQuery('#reg_btn').click(function() {
        if (valid_register()) {
            var post = {
                email: util_trim(jQuery('#reg_email').val()),
                pass: util_trim(jQuery('#reg_pass').val()),
                phone: util_trim(jQuery('#reg_phone').val()),
                uname: util_trim(jQuery('#reg_full_name').val())
            };
            phone = post.phone;
            email = post.email;
            //Check user 's info
            var valid_reg_url = base_url + 'customers/valid_reg/' + encodeURIComponent(post.email) + '/' + encodeURIComponent(post.phone);
            jQuery.get(valid_reg_url, function(data) {
                if (data.status) {
                    var msg = 'email';
                    if (data.status == 'blocked') {
                        msg = 'Email này đã được sử dụng và đang bị khóa. Nếu có bất cứ thắc mắc nào, xin Quý khách vui lòng liên hệ với IFree.';
                    }
                    else if (data.status == 'actived') {
                        msg = 'Email này đã được sử dụng! Quý khách đã <a href="javascript:void(0)" onclick="shop.customer.register.showPassForm(\'' + post.email + '\')">quên mật khẩu</a> ?';
                    } else if (data.status == 'not_actived') {
                        msg = 'Email này đã được dùng và đang trong trạng thái chưa kích hoạt. Nếu quý khách đã dùng email này mua hàng trên Muachung.vn, vui lòng kiểm tra hòm thư hoặc <a href="javascript:void(0)" onclick="shop.customer.register.sendActiveEmail(\'' + post.email + '\')">nhấn vào đây</a> để nhận lại email kích hoạt';
                    }
                    set_error('#reg_email', msg, 530, '.register_form');
                }
                else if (data.phone) {
                    set_error('#reg_phone', 'Số điện thoại ' + post.phone + ' đã được sử dụng!', 530, '.register_form');
                } else if (data.register) {
                    var reg_url = base_url + 'customers/register';
                    jQuery.post(reg_url, post, function(json) {
                        if (json.err != null) {
                            if (json.err == 0)
                            {
                                jQuery('#register_form').popup('hide');
                                show_otp_form();
                            }
                        }
                    }, 'json');
                }
            }, 'json');
        }

        return false;
    });
    jQuery('#reg_otp_confirm').click(function() {
        var code = jQuery('#reg_enabled').val();
        var otp_confirm_url = base_url + 'customers/get_register_code';
        jQuery.post(otp_confirm_url, {
            phone: phone,
            code: code,
            email: email
        }, function(json) {
            if (json.err != null) {
                if (json.err == 0) {
                    alert(' Bạn đã đăng ký thành công. Vui lòng kiểm tra email ' + email + ' và làm theo hướng dẫn để xác thực email.');
                    window.location.href = base_url;
                } else {
                    var msg = '';
                    switch (json.message) {
                        case 'no_otp':
                            msg = 'Mã kích hoạt không hợp lệ!!!';
                            break;
                        case 'expired':
                            msg = 'Mã kích hoạt đã hết hạn!!!';
                            break;
                        default:
                            msg = 'Mã kích hoạt không hợp lệ!!!';
                            break;
                    }
                    alert(msg);
                }
            }
        }, 'json');
        return false;
    });
});